<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="utf-8" />
   
  <meta name="keywords" content="郑浩枫,周芳怡,咸鱼郑某的博客" />
   
  <meta name="description" content="咸鱼郑某的博客" />
  
  <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1" />
  <title>
    UMU解析答案 |  岛
  </title>
  <meta name="generator" content="hexo-theme-yilia-plus">
  
  <link rel="shortcut icon" href="/favicon.ico" />
  
  
<link rel="stylesheet" href="/css/main.css">

  
  <script src="https://cdn.jsdelivr.net/npm/pace-js@1.0.2/pace.min.js"></script>
  
  

  

<link rel="alternate" href="/atom.xml" title="岛" type="application/atom+xml">
</head>

</html>

<body>
  <div id="app">
    <main class="content">
      <section class="outer">
  <article id="post-UMU答案解析" class="article article-type-post" itemscope
  itemprop="blogPost" data-scroll-reveal>

  <div class="article-inner">
    
    <header class="article-header">
       
<h1 class="article-title sea-center" style="border-left:0" itemprop="name">
  UMU解析答案
</h1>
  

    </header>
    

    
    <div class="article-meta">
      <a href="/2020/UMU%E8%A7%A3%E6%9E%90%E7%AD%94%E6%A1%88/" class="article-date">
  <time datetime="2020-04-09T12:46:45.000Z" itemprop="datePublished">2020-04-09</time>
</a>
      
  <div class="article-category">
    <a class="article-category-link" href="/categories/%E6%8A%80%E6%9C%AF/">技术</a>
  </div>

      
      
<div class="word_count">
    <span class="post-time">
        <span class="post-meta-item-icon">
            <i class="ri-quill-pen-line"></i>
            <span class="post-meta-item-text"> 字数统计:</span>
            <span class="post-count">3.9k字</span>
        </span>
    </span>

    <span class="post-time">
        &nbsp; | &nbsp;
        <span class="post-meta-item-icon">
            <i class="ri-book-open-line"></i>
            <span class="post-meta-item-text"> 阅读时长≈</span>
            <span class="post-count">20分钟</span>
        </span>
    </span>
</div>

      
    </div>
    

    
    
    <div class="tocbot"></div>





    

    
    <div class="article-entry" itemprop="articleBody">
      
      

      
      <h3 id="花几个小时研究出来了UMU解析出答案的方法"><a href="#花几个小时研究出来了UMU解析出答案的方法" class="headerlink" title="花几个小时研究出来了UMU解析出答案的方法"></a>花几个小时研究出来了UMU解析出答案的方法</h3><span id="more"></span>
<p>两个文件：<br><code>browser.js</code>是浏览器油猴插件，用于给UMU增加文本<br><img src="https://web-1253780623.cos.ap-shanghai.myqcloud.com/zhf-blog/images/UMU%E8%A7%A3%E6%9E%90%E7%AD%94%E6%A1%88/%E6%96%87%E5%AD%97%E5%A2%9E%E5%8A%A0%E6%95%88%E6%9E%9C.png" alt="文字增加效果"><br><code>main.py</code>是解析答案用的Python程序</p>
<h2 id="先来看看效果"><a href="#先来看看效果" class="headerlink" title="先来看看效果"></a>先来看看效果</h2><p>GIF:<br><img src="https://web-1253780623.cos.ap-shanghai.myqcloud.com/zhf-blog/images/UMU%E8%A7%A3%E6%9E%90%E7%AD%94%E6%A1%88/%E6%95%88%E6%9E%9C.gif" alt="GIF"><br>单选效果：<br><img src="https://web-1253780623.cos.ap-shanghai.myqcloud.com/zhf-blog/images/UMU%E8%A7%A3%E6%9E%90%E7%AD%94%E6%A1%88/%E5%8D%95%E9%80%89%E6%95%88%E6%9E%9C.png" alt="单选效果"></p>
<p>多选效果<br><img src="https://web-1253780623.cos.ap-shanghai.myqcloud.com/zhf-blog/images/UMU%E8%A7%A3%E6%9E%90%E7%AD%94%E6%A1%88/%E5%A4%9A%E9%80%89%E6%95%88%E6%9E%9C.png" alt="多选效果"></p>
<h2 id="首先我们先整理一下思路："><a href="#首先我们先整理一下思路：" class="headerlink" title="首先我们先整理一下思路："></a>首先我们先整理一下思路：</h2><h3 id="早期UMU答案直接放在ID是-pageDataTemplate-的一个-lt-script-gt-中"><a href="#早期UMU答案直接放在ID是-pageDataTemplate-的一个-lt-script-gt-中" class="headerlink" title="早期UMU答案直接放在ID是__pageDataTemplate__的一个&lt;script&gt;中"></a>早期UMU答案直接放在ID是<code>__pageDataTemplate__</code>的一个<code>&lt;script&gt;</code>中</h3><p>可以直接解析出答案<br>脚本代码如下：</p>
<figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br></pre></td><td class="code"><pre><code class="hljs plain">&#x2F;&#x2F; &#x3D;&#x3D;UserScript&#x3D;&#x3D;<br>&#x2F;&#x2F; @name UMU答案解析(已过时)<br>&#x2F;&#x2F; @namespace Violentmonkey Scripts<br>&#x2F;&#x2F; @match https:&#x2F;&#x2F;m.umu.cn&#x2F;session&#x2F;*<br>&#x2F;&#x2F; @grant none<br>&#x2F;&#x2F; &#x3D;&#x3D;&#x2F;UserScript&#x3D;&#x3D;<br>(function () &#123;<br>    window.onload &#x3D; function () &#123;<br>        var source_code &#x3D; $(&#39;#__pageDataTemplate__&#39;).html().toString();<br>        &#x2F;&#x2F;JSON.parse(source_code)<br>        var questions;<br>        var answer;<br>        var ABC_options &#x3D; new Array(&quot;A&quot;, &quot;B&quot;, &quot;C&quot;, &quot;D&quot;);<br>        var answer_txt;<br>        var obj_source_code &#x3D; JSON.parse(source_code);  &#x2F;&#x2F;提取json字符串<br>        &#x2F;&#x2F; var answer_position  &#x2F;&#x2F;答案位置<br>        if (obj_source_code !&#x3D; &quot;&quot;) &#123;<br>            alert(&quot;答案解析成功,点击确定开始下载&quot;);<br>            for (questions &#x3D; 0; questions &lt;&#x3D; obj_source_code.data.sectionArr.length - 1; questions++) &#123; &#x2F;&#x2F;遍历题目<br>                answer_position &#x3D; 0  &#x2F;&#x2F;位置初始化<br>                for (answer &#x3D; 0; answer &lt;&#x3D; obj_source_code.data.sectionArr[questions].answerArr.length - 1; answer++) &#123; &#x2F;&#x2F;遍历答案<br>                    if (obj_source_code.data.sectionArr[questions].answerArr[answer].isRight &#x3D;&#x3D; 1) &#123;<br>                        var title_number &#x3D; questions + 1;<br>                        &#x2F;&#x2F;console.log(&quot;第&quot; + title_number  +&quot;题的答案是：&quot; + ABC_options[answer]);<br>                        answer_txt &#x3D; answer_txt + &quot;第&quot; + title_number + &quot;题的答案是：&quot; + ABC_options[answer] + &quot;\r\n&quot;;<br>                    &#125;<br>                &#125;<br><br>            &#125;<br>            download(obj_source_code.data.quizLegacyData.session_info.sessionTitle + &quot;答案.txt&quot;, answer_txt);<br><br>            &#x2F;&#x2F;下载答案<br>            function download(filename, text) &#123;<br>                var element &#x3D; document.createElement(&#39;a&#39;);<br>                element.setAttribute(&#39;href&#39;, &#39;data:text&#x2F;plain;charset&#x3D;utf-8,&#39; + encodeURIComponent(text));<br>                element.setAttribute(&#39;download&#39;, filename);<br><br>                element.style.display &#x3D; &#39;none&#39;;<br>                document.body.appendChild(element);<br><br>                element.click();<br><br>                document.body.removeChild(element);<br>            &#125;<br>        &#125;else&#123;<br>            alert(&quot;答案获取失败&quot;);<br>        &#125;<br><br>    &#125;<br>&#125;)();<br></code></pre></td></tr></table></figure>

<h3 id="后来UMU更新，把-lt-script-gt-的ID取消掉了，但可以通过绕过登录验证直接提交再查看答案来获取"><a href="#后来UMU更新，把-lt-script-gt-的ID取消掉了，但可以通过绕过登录验证直接提交再查看答案来获取" class="headerlink" title="后来UMU更新，把&lt;script&gt;的ID取消掉了，但可以通过绕过登录验证直接提交再查看答案来获取"></a>后来UMU更新，把<code>&lt;script&gt;</code>的ID取消掉了，但可以通过绕过登录验证直接提交再查看答案来获取</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br></pre></td><td class="code"><pre><code class="hljs plain">&#x2F;&#x2F; &#x3D;&#x3D;UserScript&#x3D;&#x3D;<br>&#x2F;&#x2F; @name        UMU不登录强行做题(看老师试卷设置)<br>&#x2F;&#x2F; @namespace   Violentmonkey Scripts<br>&#x2F;&#x2F; @match       https:&#x2F;&#x2F;m.umu.cn&#x2F;session&#x2F;quiz&#x2F;*<br>&#x2F;&#x2F; @grant       none<br>&#x2F;&#x2F; @version     1.0<br>&#x2F;&#x2F; @author      -<br>&#x2F;&#x2F; @description 2020&#x2F;3&#x2F;20 下午2:51:58<br>&#x2F;&#x2F; &#x3D;&#x3D;&#x2F;UserScript&#x3D;&#x3D;<br>window.onload &#x3D; function()&#123;<br>  document.getElementsByClassName(&quot;dialog-mask&quot;)[0].remove()<br>  document.getElementsByClassName(&quot;dialog-main&quot;)[0].remove()<br>&#125;<br></code></pre></td></tr></table></figure>
<p>原理是UMU设计有问题，弹出用户登录弹窗前试卷已经加载完成，通过定位弹窗直接<code>remove</code>就好了<br><img src="https://web-1253780623.cos.ap-shanghai.myqcloud.com/zhf-blog/images/UMU%E8%A7%A3%E6%9E%90%E7%AD%94%E6%A1%88/%E8%AF%95%E5%8D%B7%E5%B7%B2%E7%BB%8F%E5%8A%A0%E8%BD%BD%E5%AE%8C%E6%88%902.png" alt="试卷已经加载完成"></p>
<h3 id="再后来UMU又更新到了现在的这个版本，-lt-script-gt-中不再存储答案，做题强制要求登录，并且试卷提交后不能查看答案"><a href="#再后来UMU又更新到了现在的这个版本，-lt-script-gt-中不再存储答案，做题强制要求登录，并且试卷提交后不能查看答案" class="headerlink" title="再后来UMU又更新到了现在的这个版本，&lt;script&gt;中不再存储答案，做题强制要求登录，并且试卷提交后不能查看答案"></a>再后来UMU又更新到了现在的这个版本，<code>&lt;script&gt;</code>中不再存储答案，做题强制要求登录，并且试卷提交后不能查看答案</h3><p><img src="https://web-1253780623.cos.ap-shanghai.myqcloud.com/zhf-blog/images/UMU%E8%A7%A3%E6%9E%90%E7%AD%94%E6%A1%88/%E8%A6%81%E6%B1%82%E5%BC%BA%E5%88%B6%E7%99%BB%E5%BD%95%E5%B9%B6%E4%B8%94%E4%B8%8D%E8%83%BD%E7%9B%B4%E6%8E%A5%E8%8E%B7%E5%8F%96%E7%AD%94%E6%A1%88.png" alt="强制登录并且不能获取答案"></p>
<h2 id="我的思路："><a href="#我的思路：" class="headerlink" title="我的思路："></a>我的思路：</h2><h3 id="1-要获取答案首先得知道答案从哪里来"><a href="#1-要获取答案首先得知道答案从哪里来" class="headerlink" title="1.要获取答案首先得知道答案从哪里来"></a>1.要获取答案首先得知道答案从哪里来</h3><p>通过观察发现，如今的UMU前端ID为<code>__pageDataTemplate__</code>的<code>&lt;script&gt;</code>中只存储题目等信息<br><img src="https://web-1253780623.cos.ap-shanghai.myqcloud.com/zhf-blog/images/UMU%E8%A7%A3%E6%9E%90%E7%AD%94%E6%A1%88/script%E6%95%B0%E6%8D%AE.png" alt="__pageDataTemplate__"><br>其中的JSON格式化之后<br><img src="https://web-1253780623.cos.ap-shanghai.myqcloud.com/zhf-blog/images/UMU%E8%A7%A3%E6%9E%90%E7%AD%94%E6%A1%88/%E6%96%B0JSON%E5%86%85%E5%AE%B9.png" alt="新JSON内容"><br>通过前端直接获取答案肯定不可能</p>
<p>观察发现，与答案有联系的只有提交后的网页</p>
<h3 id="2-我们分析提交后网页发送了哪些请求"><a href="#2-我们分析提交后网页发送了哪些请求" class="headerlink" title="2.我们分析提交后网页发送了哪些请求"></a>2.我们分析提交后网页发送了哪些请求</h3><p>  在提交试卷后，虽然不能直接在网页上显示答案，但是通过抓取数据包可以发现<br> <img src="https://web-1253780623.cos.ap-shanghai.myqcloud.com/zhf-blog/images/UMU%E8%A7%A3%E6%9E%90%E7%AD%94%E6%A1%88/%E7%AD%94%E9%A2%98%E6%83%85%E5%86%B5.png" alt="抓取数据包"></p>
<p>在加载回答情况答案时，会发送一个<code>GET</code>请求</p>
<figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs plain">https:&#x2F;&#x2F;m.umu.cn&#x2F;napi&#x2F;v1&#x2F;quiz&#x2F;question-right-answer?t&#x3D;1586402752751&amp;_type&#x3D;1&amp;element_id&#x3D;26802132&amp;question_ids&#x3D;4837368%2C4837369%2C4837370%2C4837371%2C4837372%2C4837373%2C4837374%2C4837375%2C4837376%2C4837377<br></code></pre></td></tr></table></figure>
<p>返回的内容：</p>
<figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br></pre></td><td class="code"><pre><code class="hljs plain">&#123;<br>	&quot;error_code&quot;: 0,<br>	&quot;error_message&quot;: &quot;success&quot;,<br>	&quot;data&quot;: &#123;<br>		&quot;4837368&quot;: [&#123;<br>			&quot;right_answer_id&quot;: 17472980<br>		&#125;],<br>		&quot;4837369&quot;: [&#123;<br>			&quot;right_answer_id&quot;: 17472986<br>		&#125;],<br>		&quot;4837370&quot;: [&#123;<br>			&quot;right_answer_id&quot;: 17472989<br>		&#125;],<br>		&quot;4837371&quot;: [&#123;<br>			&quot;right_answer_id&quot;: 17472992<br>		&#125;],<br>		&quot;4837372&quot;: [&#123;<br>			&quot;right_answer_id&quot;: 17472997<br>		&#125;],<br>		&quot;4837373&quot;: [&#123;<br>			&quot;right_answer_id&quot;: 17473001<br>		&#125;],<br>		&quot;4837374&quot;: [&#123;<br>			&quot;right_answer_id&quot;: 17473006<br>		&#125;],<br>		&quot;4837375&quot;: [&#123;<br>			&quot;right_answer_id&quot;: 17473008<br>		&#125;],<br>		&quot;4837376&quot;: [&#123;<br>			&quot;right_answer_id&quot;: 17473012<br>		&#125;],<br>		&quot;4837377&quot;: [&#123;<br>			&quot;right_answer_id&quot;: 17473018<br>		&#125;]<br>	&#125;<br>&#125;<br><br><br></code></pre></td></tr></table></figure>

<p>把返回的数据和前端<code>&lt;script type=&quot;text/template&quot; id=&quot;__pageDataTemplate__&quot;&gt;</code>中的内容对比发现：</p>
<figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br><span class="line">86</span><br><span class="line">87</span><br><span class="line">88</span><br><span class="line">89</span><br><span class="line">90</span><br><span class="line">91</span><br><span class="line">92</span><br><span class="line">93</span><br><span class="line">94</span><br><span class="line">95</span><br><span class="line">96</span><br><span class="line">97</span><br><span class="line">98</span><br><span class="line">99</span><br><span class="line">100</span><br><span class="line">101</span><br></pre></td><td class="code"><pre><code class="hljs plain">&#x2F;&#x2F;这是前端Json中的一部分<br>&#123;<br>			&quot;questionInfo&quot;: &#123;<br>				&quot;cid&quot;: &quot;&quot;,<br>				&quot;questionId&quot;: 4837368,<br>				&quot;questionTitle&quot;: &quot;11.系统总线的构成不包括（）&quot;,<br>				&quot;showIndex&quot;: 11,<br>				&quot;pattern&quot;: 0,<br>				&quot;level&quot;: 2,<br>				&quot;domType&quot;: &quot;radio&quot;,<br>				&quot;desc&quot;: &quot;&quot;,<br>				&quot;multimedia_id&quot;: 0,<br>				&quot;multimedia_type&quot;: 0,<br>				&quot;multimedia_weight&quot;: 0,<br>				&quot;extend&quot;: &#123;<br>					&quot;media_url&quot;: [],<br>					&quot;pic_url&quot;: []<br>				&#125;,<br>				&quot;setup&quot;: &#123;<br>					&quot;score&quot;: &quot;1.5&quot;,<br>					&quot;screenOrderType&quot;: &quot;0&quot;<br>				&#125;,<br>				&quot;questionExplain&quot;: &#123;<br>					&quot;desc&quot;: &quot;&quot;,<br>					&quot;pic_url&quot;: []<br>				&#125;,<br>				&quot;creatTime&quot;: 1583047392,<br>				&quot;QuestionExplainPicUrlFromRandom&quot;: &quot;[]&quot;,<br>				&quot;sessionId&quot;: 26802132,<br>				&quot;questionPrompt&quot;: &#123;<br>					&quot;desc&quot;: &quot;&quot;,<br>					&quot;pic_url&quot;: []<br>				&#125;,<br>				&quot;right_user_count&quot;: 0,<br>				&quot;totalCount&quot;: 0,<br>				&quot;sortType&quot;: 0,<br>				&quot;correct_rate&quot;: 0<br>			&#125;,<br>			&quot;answerArr&quot;: [&#123;<br>				&quot;answerId&quot;: 17472979,<br>				&quot;questionId&quot;: 4837368,<br>				&quot;answerContent&quot;: &quot;A.数据总线&quot;,<br>				&quot;isRight&quot;: 0,<br>				&quot;extend&quot;: &#123;<br>					&quot;media_url&quot;: [],<br>					&quot;pic_url&quot;: []<br>				&#125;,<br>				&quot;type&quot;: 0,<br>				&quot;count&quot;: 0,<br>				&quot;answerIdx&quot;: 1,<br>				&quot;ratio&quot;: 0,<br>				&quot;sort&quot;: 0,<br>				&quot;is_selected&quot;: 0<br>			&#125;, &#123;<br>				&quot;answerId&quot;: 17472980,<br>				&quot;questionId&quot;: 4837368,<br>				&quot;answerContent&quot;: &quot;B.状态总线&quot;,<br>				&quot;isRight&quot;: 0,<br>				&quot;extend&quot;: &#123;<br>					&quot;media_url&quot;: [],<br>					&quot;pic_url&quot;: []<br>				&#125;,<br>				&quot;type&quot;: 0,<br>				&quot;count&quot;: 0,<br>				&quot;answerIdx&quot;: 2,<br>				&quot;ratio&quot;: 0,<br>				&quot;sort&quot;: 0,<br>				&quot;is_selected&quot;: 0<br>			&#125;, &#123;<br>				&quot;answerId&quot;: 17472981,<br>				&quot;questionId&quot;: 4837368,<br>				&quot;answerContent&quot;: &quot;C.地址总线&quot;,<br>				&quot;isRight&quot;: 0,<br>				&quot;extend&quot;: &#123;<br>					&quot;media_url&quot;: [],<br>					&quot;pic_url&quot;: []<br>				&#125;,<br>				&quot;type&quot;: 0,<br>				&quot;count&quot;: 0,<br>				&quot;answerIdx&quot;: 3,<br>				&quot;ratio&quot;: 0,<br>				&quot;sort&quot;: 0,<br>				&quot;is_selected&quot;: 0<br>			&#125;, &#123;<br>				&quot;answerId&quot;: 17472982,<br>				&quot;questionId&quot;: 4837368,<br>				&quot;answerContent&quot;: &quot;D.控制总线&quot;,<br>				&quot;isRight&quot;: 0,<br>				&quot;extend&quot;: &#123;<br>					&quot;media_url&quot;: [],<br>					&quot;pic_url&quot;: []<br>				&#125;,<br>				&quot;type&quot;: 0,<br>				&quot;count&quot;: 0,<br>				&quot;answerIdx&quot;: 4,<br>				&quot;ratio&quot;: 0,<br>				&quot;sort&quot;: 0,<br>				&quot;is_selected&quot;: 0<br>			&#125;],<br>			&quot;answered&quot;: null<br>		&#125;<br></code></pre></td></tr></table></figure>
<p>其中<code>4837368</code>对应的是<code>questionId</code>（题目ID）<br><code>right_answer_id</code>对应的是<code>answerId</code>（选项ID）</p>
<p>其中请求中<code>question_ids</code>后面跟着的是<code>题目编号</code> + <code>%2C</code> + <code>题目编号</code><br>经过尝试，最多链接20个左右的<code>题目编号</code></p>
<h3 id="3-我们尝试在同一个浏览器上重复这个请求"><a href="#3-我们尝试在同一个浏览器上重复这个请求" class="headerlink" title="3.我们尝试在同一个浏览器上重复这个请求"></a>3.我们尝试在同一个浏览器上重复这个请求</h3><p><img src="https://web-1253780623.cos.ap-shanghai.myqcloud.com/zhf-blog/images/UMU%E8%A7%A3%E6%9E%90%E7%AD%94%E6%A1%88/%E9%87%8D%E5%A4%8D%E8%AF%B7%E6%B1%82.png" alt="重复这个请求"><br>成功！</p>
<h4 id="尝试构造其他请求"><a href="#尝试构造其他请求" class="headerlink" title="尝试构造其他请求"></a>尝试构造其他请求</h4><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs plain">https:&#x2F;&#x2F;m.umu.cn&#x2F;napi&#x2F;v1&#x2F;quiz&#x2F;question-right-answer?t&#x3D;1586402752751&amp;_type&#x3D;1&amp;element_id&#x3D;26802132&amp;question_ids&#x3D;4837368<br></code></pre></td></tr></table></figure>
<p>返回结果：</p>
<figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><code class="hljs plain">&#123;<br>	&quot;error_code&quot;: 0,<br>	&quot;error_message&quot;: &quot;success&quot;,<br>	&quot;data&quot;: &#123;<br>		&quot;4837368&quot;: [&#123;<br>			&quot;right_answer_id&quot;: 17472980<br>		&#125;]<br>	&#125;<br>&#125;<br></code></pre></td></tr></table></figure>

<h4 id="换一个浏览器进行尝试"><a href="#换一个浏览器进行尝试" class="headerlink" title="换一个浏览器进行尝试"></a>换一个浏览器进行尝试</h4><p><img src="https://web-1253780623.cos.ap-shanghai.myqcloud.com/zhf-blog/images/UMU%E8%A7%A3%E6%9E%90%E7%AD%94%E6%A1%88/%E9%9C%80%E8%A6%81%E7%99%BB%E5%BD%95.png" alt="提示需要的登录"><br>提示需要的登录</p>
<h3 id="既然要登录，我们先考虑从Cookie入手"><a href="#既然要登录，我们先考虑从Cookie入手" class="headerlink" title="既然要登录，我们先考虑从Cookie入手"></a>既然要登录，我们先考虑从Cookie入手</h3><p>通过观察<br><img src="https://web-1253780623.cos.ap-shanghai.myqcloud.com/zhf-blog/images/UMU%E8%A7%A3%E6%9E%90%E7%AD%94%E6%A1%88/COOKIE.png" alt="Cookie"></p>
<h3 id="猜测JSESSID和umuU是验证用户身份用的"><a href="#猜测JSESSID和umuU是验证用户身份用的" class="headerlink" title="猜测JSESSID和umuU是验证用户身份用的"></a>猜测<code>JSESSID</code>和<code>umuU</code>是验证用户身份用的</h3><p>进行尝试</p>
<p>成功在另一个浏览器上通过这修改这两个参数成功登录了用户</p>
<p><img src="https://web-1253780623.cos.ap-shanghai.myqcloud.com/zhf-blog/images/UMU%E8%A7%A3%E6%9E%90%E7%AD%94%E6%A1%88/%E7%99%BB%E5%BD%95%E6%88%90%E5%8A%9F.gif" alt="成功的登录"><br>非常好</p>
<h3 id="接下来用Python发送请求并解析返回的数据"><a href="#接下来用Python发送请求并解析返回的数据" class="headerlink" title="接下来用Python发送请求并解析返回的数据"></a>接下来用Python发送请求并解析返回的数据</h3><p>解析JSON就不多说了</p>
<figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br></pre></td><td class="code"><pre><code class="hljs plain">sessionId &#x3D; input(&quot;输入试卷ID后按回车键确认\n&quot;)  # 试卷ID 26802132  <br>questionId &#x3D; input(&quot;输入问题ID后按回车键确认\n&quot;)  # 问题ID 4837358<br>while questionId !&#x3D; &quot;&quot;:  <br>    page_url &#x3D; &quot;https:&#x2F;&#x2F;m.umu.cn&#x2F;napi&#x2F;v1&#x2F;quiz&#x2F;question-right-answer?t&#x3D;1586269428055&amp;_type&#x3D;1&amp;element_id&#x3D;&quot; + sessionId + &quot;&amp;question_ids&#x3D;&quot; + questionId  <br>    cookies &#x3D; &#123;&quot;umuU&quot;: &quot;f23e9ca35d389910557ef16a94a191e3&quot;, &quot;JSESSID&quot;: &quot;lu990lr0p8udiobqb6eqmi1mn3&quot;,  <br>               &quot;_lang&quot;: &quot;zh-cn&quot;,  <br>               &quot;Hm_lvt_0dda0edb8e4fbece1e49e12fc49614dc&quot;: &quot;1586319220&quot;,  <br>               &quot;Hm_lpvt_0dda0edb8e4fbece1e49e12fc49614dc&quot;: &quot;1586319427&quot;&#125;  <br>    response &#x3D; requests.get(page_url, cookies&#x3D;cookies)  <br>    response.encoding &#x3D; &#39;utf-8&#39;  <br>  html &#x3D; response.text  <br>    data_json &#x3D; json.loads(html)  <br>    msg_len &#x3D; len(data_json[&#39;data&#39;][questionId])  <br>    print(&quot;共：&quot; + str(msg_len) + &quot;个答案&quot;)  <br>    for msg_id in range(msg_len): #循环所有答案  <br>  print(&quot;答案ID是：&quot; + str(data_json[&#39;data&#39;][questionId][msg_id][&#39;right_answer_id&#39;]))  <br>    questionId &#x3D; input(&quot;输入问题ID后按回车键确认\n&quot;)<br></code></pre></td></tr></table></figure>

<h3 id="发现每次重新登录后JSESSID和umuU都会改变，如果继续使用上一次的JSESSID和umuU就会验证失败"><a href="#发现每次重新登录后JSESSID和umuU都会改变，如果继续使用上一次的JSESSID和umuU就会验证失败" class="headerlink" title="发现每次重新登录后JSESSID和umuU都会改变，如果继续使用上一次的JSESSID和umuU就会验证失败"></a>发现每次重新登录后<code>JSESSID</code>和<code>umuU</code>都会改变，如果继续使用上一次的<code>JSESSID</code>和<code>umuU</code>就会验证失败</h3><p> <strong>所以我们需要模拟用户登录来获取实时的<code>JSESSID</code>和<code>umuU</code></strong></p>
<h4 id="首先抓取登录界面的数据："><a href="#首先抓取登录界面的数据：" class="headerlink" title="首先抓取登录界面的数据："></a>首先抓取登录界面的数据：</h4><p>因为登录后网页会跳转，所以我们通过<code>HTTPDebugger</code>来进行抓包</p>
<p>今天在写这篇文章的时候，想要重现抓包过程，但是发现<code>HTTPDebugger</code>怎么都抓不到<code>POST</code>请求的数据包，于是换成了<code>Fiddler</code></p>
<p>我们登陆用户<code>赵铁柱</code>并抓包<br>请求:</p>
<figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br></pre></td><td class="code"><pre><code class="hljs plain">POST https:&#x2F;&#x2F;m.umu.cn&#x2F;passport&#x2F;ajax&#x2F;account&#x2F;login HTTP&#x2F;1.1<br>Host: m.umu.cn<br>User-Agent: Mozilla&#x2F;5.0 (Windows NT 10.0; Win64; x64; rv:75.0) Gecko&#x2F;20100101 Firefox&#x2F;75.0<br>Accept: application&#x2F;json<br>Accept-Language: zh-CN,zh;q&#x3D;0.8,zh-TW;q&#x3D;0.7,zh-HK;q&#x3D;0.5,en-US;q&#x3D;0.3,en;q&#x3D;0.2<br>Accept-Encoding: gzip, deflate, br<br>X-Requested-With: XMLHttpRequest<br>Content-Type: application&#x2F;x-www-form-urlencoded<br>umu-b: 1<br>umu-p: wap<br>Content-Length: 52<br>Origin: https:&#x2F;&#x2F;m.umu.cn<br>Connection: keep-alive<br>Referer: https:&#x2F;&#x2F;m.umu.cn&#x2F;globaluser&#x2F;loginpage<br>Cookie: umuU&#x3D;7574f2a8da1dd89daec6276f47626dd8; JSESSID&#x3D;tgoalklikkdihgn72bfpq2hrt6; Hm_lvt_0dda0edb8e4fbece1e49e12fc49614dc&#x3D;1586400357,1586413009,1586430824,1586431834; estuid&#x3D;u57893495940; estuidtoken&#x3D;dab74b9230b0fd4ed0eeaf5cba7af5101586431830; _lang&#x3D;zh-cn; Hm_lpvt_0dda0edb8e4fbece1e49e12fc49614dc&#x3D;1586434265<br><br>username&#x3D;zmsxre34026%40chacuo.net&amp;passwd&#x3D;zmsxre34026<br></code></pre></td></tr></table></figure>
<p>返回：</p>
<figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br></pre></td><td class="code"><pre><code class="hljs plain">HTTP&#x2F;1.1 200 OK<br>Date: Thu, 09 Apr 2020 12:24:43 GMT<br>Content-Type: application&#x2F;json;charset&#x3D;UTF-8<br>Connection: keep-alive<br>Vary: Accept-Encoding<br>Expires: Thu, 19 Nov 1981 08:52:00 GMT<br>Cache-Control: no-store, no-cache, must-revalidate<br>Pragma: no-cache<br>Set-Cookie: _lang&#x3D;zh-cn; path&#x3D;&#x2F;; domain&#x3D;umu.cn; secure<br>SESSION_ID: grio<br>Set-Cookie: lk&#x3D;deleted; expires&#x3D;Thu, 01-Jan-1970 00:00:01 GMT; Max-Age&#x3D;0; path&#x3D;&#x2F;; domain&#x3D;umu.cn; secure; HttpOnly<br>Set-Cookie: umuU&#x3D;4be4d141a4e47e3d5485e1c53fef12c6; expires&#x3D;Sat, 11-Apr-2020 12:24:43 GMT; Max-Age&#x3D;172800; path&#x3D;&#x2F;; domain&#x3D;umu.cn; secure; HttpOnly<br>Set-Cookie: JSESSID&#x3D;hvti97qjg6jceor6kk9me9an65; expires&#x3D;Sat, 16-Mar-2120 12:24:43 GMT; Max-Age&#x3D;3153600000; path&#x3D;&#x2F;; domain&#x3D;umu.cn; secure; HttpOnly<br>Set-Cookie: estuid&#x3D;u16977626743; path&#x3D;&#x2F;; domain&#x3D;umu.cn; secure; HttpOnly<br>Set-Cookie: estuidtoken&#x3D;7fb5f75960a62f7b41ff50a413d5d9c11586435083; path&#x3D;&#x2F;; domain&#x3D;umu.cn; secure; HttpOnly<br>Server: Apache&#x2F;2.2.21&#x2F;web20<br>Strict-Transport-Security: max-age&#x3D;63072000; includeSubdomains; preload<br>server_number: 92<br>Content-Length: 733<br><br>&#123;<br>	&quot;status&quot;: true,<br>	&quot;errno&quot;: 0,<br>	&quot;error&quot;: &quot;success&quot;,<br>	&quot;data&quot;: &#123;<br>		&quot;user_info&quot;: &#123;<br>			&quot;student_id&quot;: &quot;20097904&quot;,<br>			&quot;umu_id&quot;: &quot;7434306&quot;,<br>			&quot;user_name&quot;: &quot;赵铁柱&quot;,<br>			&quot;avatar&quot;: &quot;&quot;,<br>			&quot;home_url&quot;: &quot;https:\&#x2F;\&#x2F;m.umu.cn\&#x2F;profile\&#x2F;432ba2d0ae256eb86a6aa730&quot;,<br>			&quot;phone&quot;: &quot;&quot;,<br>			&quot;email&quot;: &quot;zmsxre34026@chacuo.net&quot;,<br>			&quot;user_mark&quot;: &quot;69972311&quot;,<br>			&quot;medal_info&quot;: &#123;<br>				&quot;show_user_level&quot;: 1,<br>				&quot;user_level&quot;: 4,<br>				&quot;user_growth_points&quot;: 96<br>			&#125;<br>		&#125;,<br>		&quot;teacher_info&quot;: &#123;<br>			&quot;umu_id&quot;: &quot;7434306&quot;,<br>			&quot;teacherId&quot;: &quot;7430897&quot;,<br>			&quot;student_id&quot;: &quot;20097904&quot;,<br>			&quot;enterprise_id&quot;: &quot;0&quot;,<br>			&quot;bind_phone&quot;: &quot;&quot;,<br>			&quot;bind_area_code&quot;: &quot;&quot;,<br>			&quot;register_step&quot;: 4,<br>			&quot;register_from&quot;: &quot;1&quot;,<br>			&quot;need_bind_mobile&quot;: 0<br>		&#125;<br>	&#125;,<br>	&quot;token&quot;: &quot;hvti97qjg6jceor6kk9me9an65&quot;,<br>	&quot;page_token&quot;: &quot;673175|1586435083|070fdc&quot;,<br>	&quot;config&quot;: &#123;<br>		&quot;step_length&quot;: 30,<br>		&quot;env&quot;: &quot;ONLINE&quot;,<br>		&quot;lang&quot;: &quot;zh-cn&quot;,<br>		&quot;site_host&quot;: &quot;umu.cn&quot;,<br>		&quot;system&quot;: &quot;CN&quot;,<br>		&quot;fixed&quot;: true<br>	&#125;<br>&#125;<br></code></pre></td></tr></table></figure>
<h4 id="接下来只要用Python模拟请求，并从返回的数据中获取我们要的cookie就好了"><a href="#接下来只要用Python模拟请求，并从返回的数据中获取我们要的cookie就好了" class="headerlink" title="接下来只要用Python模拟请求，并从返回的数据中获取我们要的cookie就好了"></a>接下来只要用Python模拟请求，并从返回的数据中获取我们要的cookie就好了</h4><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br></pre></td><td class="code"><pre><code class="hljs plain">import requests  <br>import json  <br>page_url &#x3D; &#39;https:&#x2F;&#x2F;m.umu.cn&#x2F;passport&#x2F;ajax&#x2F;account&#x2F;login&#39;  <br>payload &#x3D; &#123;&quot;username&quot;: &#39;zmsxre34026@chacuo.net&#39;, &quot;passwd&quot;: &quot;zmsxre34026&quot;&#125;  # 值以字典的形式传入  <br>response &#x3D; requests.post(page_url, data&#x3D;payload)  <br>response.encoding &#x3D; &#39;utf-8&#39;  <br>html &#x3D; response.text  <br>user_cookie &#x3D; response.cookies  # 获取cookies  <br>user_json &#x3D; json.loads(html)  # 用户信息  <br>print(&quot;正在登录公共用户赵铁柱&quot;)  <br>print(&quot;用户ID：&quot; + user_json[&#39;data&#39;][&#39;user_info&#39;][&#39;umu_id&#39;])  <br>print(&quot;用户名称：&quot; + user_json[&#39;data&#39;][&#39;user_info&#39;][&#39;user_name&#39;])  <br>if user_json[&#39;data&#39;][&#39;user_info&#39;][&#39;umu_id&#39;] &#x3D;&#x3D; &quot;赵铁柱&quot;:  <br>    print(&quot;用户登录成功！&quot;)  <br>for item in user_cookie:  <br>    item &#x3D; str(item)  <br>    if item.find(&quot;JSESSID&quot;) !&#x3D; -1:  <br>        JSESSID &#x3D; item[item.find(&quot;JSESSID&quot;) + 8:item.find(&quot;for .umu.cn&quot;) - 1]  <br>        print(&quot;JSESSID&#x3D;&quot;+JSESSID)  <br>    if item.find(&quot;umuU&quot;) !&#x3D; -1:  <br>        umuU &#x3D; item[item.find(&quot;umuU&quot;) + 5:item.find(&quot;for .umu.cn&quot;) - 1]  <br>        print(&quot;umuU&#x3D;&quot;+umuU)<br></code></pre></td></tr></table></figure>

<p>结果：</p>
<figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><code class="hljs plain">正在登录公共用户赵铁柱<br>用户ID：7434306<br>用户名称：赵铁柱<br>JSESSID&#x3D;ujrmhuh1g64nbgb2ni7fehrpa5<br>umuU&#x3D;c4ecd3a72ea6dd2e8637f6e9c3a34d38<br></code></pre></td></tr></table></figure>

<h3 id="最后和之前解析答案的代码合并到一起整理下逻辑就行了"><a href="#最后和之前解析答案的代码合并到一起整理下逻辑就行了" class="headerlink" title="最后和之前解析答案的代码合并到一起整理下逻辑就行了"></a>最后和之前解析答案的代码合并到一起整理下逻辑就行了</h3><p><code>main.py</code>：</p>
<figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br></pre></td><td class="code"><pre><code class="hljs plain">#1.1  <br>#我的博客：https:&#x2F;&#x2F;zhfhz.gitee.io&#x2F;  <br>import requests  <br>import json  <br>operation &#x3D; input(&quot;1.请确保公共用户赵铁柱提交过试卷\n2.详细请看我博客https:&#x2F;&#x2F;zhfhz.gitee.io\n3.请按回车键开始\n&quot;)  <br>##登录模块  <br>page_url &#x3D; &#39;https:&#x2F;&#x2F;m.umu.cn&#x2F;passport&#x2F;ajax&#x2F;account&#x2F;login&#39;  <br>payload &#x3D; &#123;&quot;username&quot;: &#39;zmsxre34026@chacuo.net&#39;, &quot;passwd&quot;: &quot;zmsxre34026&quot;&#125;  # 值以字典的形式传入  <br>response &#x3D; requests.post(page_url, data&#x3D;payload)  <br>response.encoding &#x3D; &#39;utf-8&#39;  <br>html &#x3D; response.text  <br>user_cookie &#x3D; response.cookies  # 获取cookies  <br>user_json &#x3D; json.loads(html)  # 用户信息  <br>print(&quot;正在登录公共用户赵铁柱&quot;)  <br>print(&quot;用户ID：&quot; + user_json[&#39;data&#39;][&#39;user_info&#39;][&#39;umu_id&#39;])  <br>print(&quot;用户名称：&quot; + user_json[&#39;data&#39;][&#39;user_info&#39;][&#39;user_name&#39;])  <br>if user_json[&#39;data&#39;][&#39;user_info&#39;][&#39;umu_id&#39;] &#x3D;&#x3D; &quot;赵铁柱&quot;:  <br>    print(&quot;用户登录成功！&quot;)  <br>for item in user_cookie:  <br>    item &#x3D; str(item)  <br>    if item.find(&quot;JSESSID&quot;) !&#x3D; -1:  <br>        # print(item)  <br>  JSESSID &#x3D; item[item.find(&quot;JSESSID&quot;) + 8:item.find(&quot;for .umu.cn&quot;) - 1]  <br>    if item.find(&quot;umuU&quot;) !&#x3D; -1:  <br>        # print(item)  <br>  umuU &#x3D; item[item.find(&quot;umuU&quot;) + 5:item.find(&quot;for .umu.cn&quot;) - 1]  <br>##解析模块  <br>sessionId &#x3D; input(&quot;输入试卷ID后按回车键确认\n&quot;)  # 试卷ID 26802132  <br>questionId &#x3D; input(&quot;输入问题ID后按回车键确认\n&quot;)  # 问题ID 4837358  <br>while questionId !&#x3D; &quot;&quot;:  <br>    page_url &#x3D; &quot;https:&#x2F;&#x2F;m.umu.cn&#x2F;napi&#x2F;v1&#x2F;quiz&#x2F;question-right-answer?t&#x3D;1586269428055&amp;_type&#x3D;1&amp;element_id&#x3D;&quot; + sessionId + &quot;&amp;question_ids&#x3D;&quot; + questionId  <br>    cookies &#x3D; &#123;&quot;umuU&quot;: umuU, &quot;JSESSID&quot;: JSESSID,  <br>               &quot;_lang&quot;: &quot;zh-cn&quot;,  <br>               &quot;Hm_lvt_0dda0edb8e4fbece1e49e12fc49614dc&quot;: &quot;1586319220&quot;,  <br>               &quot;Hm_lpvt_0dda0edb8e4fbece1e49e12fc49614dc&quot;: &quot;1586319427&quot;&#125;  <br>    response &#x3D; requests.get(page_url, cookies&#x3D;cookies)  <br>    response.encoding &#x3D; &#39;utf-8&#39;  <br>  html &#x3D; response.text  <br>    data_json &#x3D; json.loads(html)  <br>    msg_len &#x3D; len(data_json[&#39;data&#39;][questionId])  <br>    print(&quot;共：&quot; + str(msg_len) + &quot;个答案&quot;)  <br>    for msg_id in range(msg_len): #循环所有答案  <br>  print(&quot;答案ID是：&quot; + str(data_json[&#39;data&#39;][questionId][msg_id][&#39;right_answer_id&#39;]))  <br>    questionId &#x3D; input(&quot;输入问题ID后按回车键确认\n&quot;)<br></code></pre></td></tr></table></figure>
<h3 id="其他提示"><a href="#其他提示" class="headerlink" title="其他提示"></a>其他提示</h3><p>在使用Python <code>requests.post()</code>模块的时候，可能会有类似报错：</p>
<figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs plain">requests.exceptions.SSLError: HTTPSConnectionPool(host&#x3D;&#39;XXX.XXXX.COM&#39;, port&#x3D;443): Max retries exceeded with url: &#x2F; (Caused by SSLError(SSLError(1, u&#39;[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:581)&#39;),))<br></code></pre></td></tr></table></figure>
<p>解决方法是安装三个模块：</p>
<blockquote>
<p>pip install cryptography<br>pip install pyOpenSSL<br>pip install certifi</p>
</blockquote>
<h2 id="浏览器端脚本"><a href="#浏览器端脚本" class="headerlink" title="浏览器端脚本"></a>浏览器端脚本</h2><p>我们使用上面的程序可以做到输入<code>问题ID</code>返回<code>答案ID</code>的效果，但还是不方便我们查询，所以我写了浏览器端的脚本用来把<code>问题ID</code>与<code>答案ID</code>直接显示在题目上。</p>
<p>原理很简单，就是通过</p>
<figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs plain">document.getElementById(&quot;__pageDataTemplate__&quot;).innerHTML<br></code></pre></td></tr></table></figure>

<p>获取前端题目的JSON并进行解析就好了<br>油猴脚本代码<code>browser.js</code>：</p>
<figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br></pre></td><td class="code"><pre><code class="hljs plain">&#x2F;&#x2F; &#x3D;&#x3D;UserScript&#x3D;&#x3D;<br>&#x2F;&#x2F; @name        UMU增加文字 <br>&#x2F;&#x2F; @namespace   咸鱼郑某的博客：https:&#x2F;&#x2F;zhfhz.gitee.io&#x2F;<br>&#x2F;&#x2F; @match       *:&#x2F;&#x2F;m.umu.cn&#x2F;session&#x2F;quiz&#x2F;*<br>&#x2F;&#x2F; @grant       none<br>&#x2F;&#x2F; @version     1.0<br>&#x2F;&#x2F; @author      -<br>&#x2F;&#x2F; @description 2020&#x2F;4&#x2F;8 下午12:22:26<br>&#x2F;&#x2F; &#x3D;&#x3D;&#x2F;UserScript&#x3D;&#x3D;<br><br>window.onload &#x3D; function() &#123;<br>	var data_json &#x3D; document.getElementById(&quot;__pageDataTemplate__&quot;).innerHTML &#x2F;&#x2F;获取SB JSON<br>	var qustion_len &#x3D; JSON.parse(data_json).data.sectionArr.length<br>	var qustion_arr &#x3D; JSON.parse(data_json).data.sectionArr &#x2F;&#x2F;所有问题数组<br>  var qustion_num &#x3D; 0 &#x2F;&#x2F;选项序号<br>  alert(&quot;请牢记该问卷ID：\n&quot;+ JSON.parse(data_json).data.quizLegacyData.session_info.sessionId)<br>	for (var i &#x3D; 0; i &lt;&#x3D; qustion_len - 1; i++) &#123;<br>    var qustion_option &#x3D;qustion_arr[i]  &#x2F;&#x2F;问题<br>    &#x2F;&#x2F;JSON.parse(document.getElementById(&quot;__pageDataTemplate__&quot;).innerHTML).data.sectionArr[0].questionInfo.questionId<br>    &#x2F;&#x2F;增加题目编号<br>    if(qustion_option.questionInfo.domType&#x3D;&#x3D;&quot;radio&quot;)&#123;<br>      &#x2F;&#x2F;单选<br>      document.getElementsByClassName(&quot;type-desc titleTypeDesc&quot;)[i].innerHTML &#x3D;  &quot;单选 题目ID：&quot; + qustion_option.questionInfo.questionId<br>      <br>    &#125;else if(qustion_option.questionInfo.domType&#x3D;&#x3D;&quot;checkbox&quot;)&#123;<br>      &#x2F;&#x2F;多选<br>      document.getElementsByClassName(&quot;type-desc titleTypeDesc&quot;)[i].innerHTML &#x3D;  &quot;多选 题目ID：&quot; + qustion_option.questionInfo.questionId<br>      <br>    &#125;<br>    <br>    for(var j&#x3D;0;j&lt;&#x3D;qustion_option.answerArr.length-1;j++)&#123;<br>      var answerId &#x3D; qustion_option.answerArr[j].answerId  &#x2F;&#x2F;选项ID<br>      &#x2F;&#x2F;给文字增加ID<br>       document.getElementsByClassName(&quot;option-detail&quot;)[qustion_num].innerHTML &#x3D; document.getElementsByClassName(&quot;option-detail&quot;)[qustion_num].innerHTML + &quot;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;答案ID：&quot; + answerId<br>      qustion_num &#x3D; qustion_num + 1 &#x2F;&#x2F;选项序号 +1<br>    &#125;<br>	&#125;<br>&#125;<br></code></pre></td></tr></table></figure>

<h2 id="最终效果"><a href="#最终效果" class="headerlink" title="最终效果"></a>最终效果</h2><p>GIF:<br><img src="https://web-1253780623.cos.ap-shanghai.myqcloud.com/zhf-blog/images/UMU%E8%A7%A3%E6%9E%90%E7%AD%94%E6%A1%88/%E6%95%88%E6%9E%9C.gif" alt="GIF"></p>
<p>单选效果：<br><img src="https://web-1253780623.cos.ap-shanghai.myqcloud.com/zhf-blog/images/UMU%E8%A7%A3%E6%9E%90%E7%AD%94%E6%A1%88/%E5%8D%95%E9%80%89%E6%95%88%E6%9E%9C.png" alt="单选效果"></p>
<p>多选效果<br><img src="https://web-1253780623.cos.ap-shanghai.myqcloud.com/zhf-blog/images/UMU%E8%A7%A3%E6%9E%90%E7%AD%94%E6%A1%88/%E5%A4%9A%E9%80%89%E6%95%88%E6%9E%9C.png" alt="多选效果"></p>

      
      <!-- reward -->
      
      <div id="reward-btn">
        打赏
      </div>
      
    </div>
    
    
      <!-- copyright -->
      
        <div class="declare">
          <ul class="post-copyright">
            <li>
              <i class="ri-copyright-line"></i>
              <strong>版权声明： </strong s>
              本博客所有文章除特别声明外，均采用 <a href="https://www.apache.org/licenses/LICENSE-2.0.html" rel="external nofollow"
                target="_blank">Apache License 2.0</a> 许可协议。转载请注明出处！
            </li>
          </ul>
        </div>
        
    <footer class="article-footer">
      
          
<div class="share-btn">
      <span class="share-sns share-outer">
        <i class="ri-share-forward-line"></i>
        分享
      </span>
      <div class="share-wrap">
        <i class="arrow"></i>
        <div class="share-icons">
          
          <a class="weibo share-sns" href="javascript:;" data-type="weibo">
            <i class="ri-weibo-fill"></i>
          </a>
          <a class="weixin share-sns wxFab" href="javascript:;" data-type="weixin">
            <i class="ri-wechat-fill"></i>
          </a>
          <a class="qq share-sns" href="javascript:;" data-type="qq">
            <i class="ri-qq-fill"></i>
          </a>
          <a class="douban share-sns" href="javascript:;" data-type="douban">
            <i class="ri-douban-line"></i>
          </a>
          <!-- <a class="qzone share-sns" href="javascript:;" data-type="qzone">
            <i class="icon icon-qzone"></i>
          </a> -->
          
          <a class="facebook share-sns" href="javascript:;" data-type="facebook">
            <i class="ri-facebook-circle-fill"></i>
          </a>
          <a class="twitter share-sns" href="javascript:;" data-type="twitter">
            <i class="ri-twitter-fill"></i>
          </a>
          <a class="google share-sns" href="javascript:;" data-type="google">
            <i class="ri-google-fill"></i>
          </a>
        </div>
      </div>
</div>

<div class="wx-share-modal">
    <a class="modal-close" href="javascript:;"><i class="ri-close-circle-line"></i></a>
    <p>扫一扫，分享到微信</p>
    <div class="wx-qrcode">
      <img src="//api.qrserver.com/v1/create-qr-code/?size=150x150&data=https://zhfhz.gitee.io/2020/UMU%E8%A7%A3%E6%9E%90%E7%AD%94%E6%A1%88/" alt="微信分享二维码">
    </div>
</div>

<div id="share-mask"></div>
      
      
  <ul class="article-tag-list" itemprop="keywords"><li class="article-tag-list-item"><a class="article-tag-list-link" href="/tags/%E6%8A%80%E6%9C%AF/" rel="tag">技术</a></li><li class="article-tag-list-item"><a class="article-tag-list-link" href="/tags/%E7%A0%B4%E8%A7%A3/" rel="tag">破解</a></li></ul>


    </footer>

  </div>

  
  
  <nav class="article-nav">
    
      <a href="/2020/%E5%85%B3%E4%BA%8E%E7%83%AD%E7%82%B9%E6%96%B0%E9%97%BB/" class="article-nav-link">
        <strong class="article-nav-caption">上一篇</strong>
        <div class="article-nav-title">
          
            关于热点新闻
          
        </div>
      </a>
    
    
      <a href="/2020/%E8%AF%95%E7%8E%A9%E4%BA%86%E4%B8%80%E4%B8%8B%E8%BF%B7%E4%BD%A0%E4%B8%96%E7%95%8C/" class="article-nav-link">
        <strong class="article-nav-caption">下一篇</strong>
        <div class="article-nav-title">试玩了一下迷你世界</div>
      </a>
    
  </nav>


  

  
  
<!-- valine评论 -->
<div id="vcomments-box">
    <div id="vcomments">
    </div>
</div>
<script src="//cdn1.lncld.net/static/js/3.0.4/av-min.js"></script>
<script src='https://cdn.jsdelivr.net/npm/valine@1.3.10/dist/Valine.min.js'></script>
<script>
    new Valine({
        el: '#vcomments',
        app_id: 'QExPaN3yEdYGXDLijnPKdTc8-MdYXbMMI',
        app_key: 'kyQzz6yRJkdRHcMm0tpOvSYY',
        path: window.location.pathname,
        notify: 'true',
        verify: 'false',
        avatar: 'mp',
        placeholder: '给我的文章加点评论吧~',
        recordIP: true
    });
    const infoEle = document.querySelector('#vcomments .info');
    if (infoEle && infoEle.childNodes && infoEle.childNodes.length > 0) {
        infoEle.childNodes.forEach(function (item) {
            item.parentNode.removeChild(item);
        });
    }
</script>
<style>
    #vcomments-box {
        padding: 5px 30px;
    }

    @media screen and (max-width: 800px) {
        #vcomments-box {
            padding: 5px 0px;
        }
    }

    #vcomments-box #vcomments {
        background-color: #fff;
    }

    .v .vlist .vcard .vh {
        padding-right: 20px;
    }

    .v .vlist .vcard {
        padding-left: 10px;
    }
</style>

  

  
  
  

</article>
</section>
      <footer class="footer">
  <div class="outer">
    <ul class="list-inline">
      <li>
        &copy;
        2020-2021
        ZHF
      </li>
      <li>
        
        Powered by
        
        
        <a href="https://hexo.io" target="_blank">Hexo</a> Theme <a href="https://github.com/Shen-Yu/hexo-theme-ayer" target="_blank">Ayer</a>
        
      </li>
    </ul>
    <ul class="list-inline">
      <li>
        
        
        <span>
  <i>PV:<span id="busuanzi_value_page_pv"></span></i>
  <i>UV:<span id="busuanzi_value_site_uv"></span></i>
</span>
        
      </li>
      
      <li>
        <!-- cnzz统计 -->
        
        <script type="text/javascript" src=''></script>
        
      </li>
    </ul>
  </div>
</footer>
      <div class="to_top">
        <div class="totop" id="totop">
  <i class="ri-arrow-up-line"></i>
</div>
      </div>
    </main>
    <aside class="sidebar">
      <button class="navbar-toggle"></button>
<nav class="navbar">
  
  <div class="logo">
    <a href="/"><img src="/images/ayer-side.svg" alt="岛"></a>
  </div>
  
  <ul class="nav nav-main">
    
    <li class="nav-item">
      <a class="nav-item-link" href="/">主页</a>
    </li>
    
    <li class="nav-item">
      <a class="nav-item-link" href="/archives">归档</a>
    </li>
    
    <li class="nav-item">
      <a class="nav-item-link" href="/categories">分类</a>
    </li>
    
    <li class="nav-item">
      <a class="nav-item-link" href="/tags">标签</a>
    </li>
    
    <li class="nav-item">
      <a class="nav-item-link" href="/tags/%E6%97%85%E8%A1%8C/">旅行</a>
    </li>
    
    <li class="nav-item">
      <a class="nav-item-link" target="_blank" rel="noopener" href="https://500px.me/ZHFHZ">摄影</a>
    </li>
    
    <li class="nav-item">
      <a class="nav-item-link" href="/2019/about">关于我</a>
    </li>
    
  </ul>
</nav>
<nav class="navbar navbar-bottom">
  <ul class="nav">
    <li class="nav-item">
      
      <a class="nav-item-link nav-item-search"  title="Search">
        <i class="ri-search-line"></i>
      </a>
      
      
      <a class="nav-item-link" target="_blank" href="/atom.xml" title="RSS Feed">
        <i class="ri-rss-line"></i>
      </a>
      
    </li>
  </ul>
</nav>
<div class="search-form-wrap">
  <div class="local-search local-search-plugin">
  <input type="search" id="local-search-input" class="local-search-input" placeholder="Search...">
  <div id="local-search-result" class="local-search-result"></div>
</div>
</div>
    </aside>
    <div id="mask"></div>

<!-- #reward -->
<div id="reward">
  <span class="close"><i class="ri-close-line"></i></span>
  <p class="reward-p"><i class="ri-cup-line"></i>请我喝杯咖啡吧~</p>
  <div class="reward-box">
    
    <div class="reward-item">
      <img class="reward-img" src="/images/alipay.jpg">
      <span class="reward-type">支付宝</span>
    </div>
    
    
    <div class="reward-item">
      <img class="reward-img" src="/images/wechat.jpg">
      <span class="reward-type">微信</span>
    </div>
    
  </div>
</div>
    
<script src="/js/jquery-2.0.3.min.js"></script>


<script src="/js/share.js"></script>


<script src="/js/lazyload.min.js"></script>


<script>
  try {
    var typed = new Typed("#subtitle", {
      strings: ['面朝大海，春暖花开', '愿你一生努力，一生被爱', '想要的都拥有，得不到的都释怀'],
      startDelay: 0,
      typeSpeed: 200,
      loop: true,
      backSpeed: 100,
      showCursor: true
    });
  } catch (err) {
  }

</script>




<script src="/js/tocbot.min.js"></script>

<script>
  // Tocbot_v4.7.0  http://tscanlin.github.io/tocbot/
  tocbot.init({
    tocSelector: '.tocbot',
    contentSelector: '.article-entry',
    headingSelector: 'h1, h2, h3, h4, h5, h6',
    hasInnerContainers: true,
    scrollSmooth: true,
    scrollContainer: 'main',
    positionFixedSelector: '.tocbot',
    positionFixedClass: 'is-position-fixed',
    fixedSidebarOffset: 'auto',
    onClick: (e) => {
      $('.toc-link').removeClass('is-active-link');
      $(`a[href=${e.target.hash}]`).addClass('is-active-link');
      $(e.target.hash).scrollIntoView();
      return false;
    }
  });
</script>



<script src="https://cdn.jsdelivr.net/npm/jquery-modal@0.9.2/jquery.modal.min.js"></script>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/jquery-modal@0.9.2/jquery.modal.min.css">
<script src="https://cdn.jsdelivr.net/npm/justifiedGallery@3.7.0/dist/js/jquery.justifiedGallery.min.js"></script>

<script src="/js/ayer.js"></script>



<!-- Root element of PhotoSwipe. Must have class pswp. -->
<div class="pswp" tabindex="-1" role="dialog" aria-hidden="true">

    <!-- Background of PhotoSwipe. 
         It's a separate element as animating opacity is faster than rgba(). -->
    <div class="pswp__bg"></div>

    <!-- Slides wrapper with overflow:hidden. -->
    <div class="pswp__scroll-wrap">

        <!-- Container that holds slides. 
            PhotoSwipe keeps only 3 of them in the DOM to save memory.
            Don't modify these 3 pswp__item elements, data is added later on. -->
        <div class="pswp__container">
            <div class="pswp__item"></div>
            <div class="pswp__item"></div>
            <div class="pswp__item"></div>
        </div>

        <!-- Default (PhotoSwipeUI_Default) interface on top of sliding area. Can be changed. -->
        <div class="pswp__ui pswp__ui--hidden">

            <div class="pswp__top-bar">

                <!--  Controls are self-explanatory. Order can be changed. -->

                <div class="pswp__counter"></div>

                <button class="pswp__button pswp__button--close" title="Close (Esc)"></button>

                <button class="pswp__button pswp__button--share" style="display:none" title="Share"></button>

                <button class="pswp__button pswp__button--fs" title="Toggle fullscreen"></button>

                <button class="pswp__button pswp__button--zoom" title="Zoom in/out"></button>

                <!-- Preloader demo http://codepen.io/dimsemenov/pen/yyBWoR -->
                <!-- element will get class pswp__preloader--active when preloader is running -->
                <div class="pswp__preloader">
                    <div class="pswp__preloader__icn">
                        <div class="pswp__preloader__cut">
                            <div class="pswp__preloader__donut"></div>
                        </div>
                    </div>
                </div>
            </div>

            <div class="pswp__share-modal pswp__share-modal--hidden pswp__single-tap">
                <div class="pswp__share-tooltip"></div>
            </div>

            <button class="pswp__button pswp__button--arrow--left" title="Previous (arrow left)">
            </button>

            <button class="pswp__button pswp__button--arrow--right" title="Next (arrow right)">
            </button>

            <div class="pswp__caption">
                <div class="pswp__caption__center"></div>
            </div>

        </div>

    </div>

</div>

<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/photoswipe@4.1.3/dist/photoswipe.min.css">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/photoswipe@4.1.3/dist/default-skin/default-skin.min.css">
<script src="https://cdn.jsdelivr.net/npm/photoswipe@4.1.3/dist/photoswipe.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/photoswipe@4.1.3/dist/photoswipe-ui-default.min.js"></script>

<script>
    function viewer_init() {
        let pswpElement = document.querySelectorAll('.pswp')[0];
        let $imgArr = document.querySelectorAll(('.article-entry img:not(.reward-img)'))

        $imgArr.forEach(($em, i) => {
            $em.onclick = () => {
                // slider展开状态
                // todo: 这样不好，后面改成状态
                if (document.querySelector('.left-col.show')) return
                let items = []
                $imgArr.forEach(($em2, i2) => {
                    let img = $em2.getAttribute('data-idx', i2)
                    let src = $em2.getAttribute('data-target') || $em2.getAttribute('src')
                    let title = $em2.getAttribute('alt')
                    // 获得原图尺寸
                    const image = new Image()
                    image.src = src
                    items.push({
                        src: src,
                        w: image.width || $em2.width,
                        h: image.height || $em2.height,
                        title: title
                    })
                })
                var gallery = new PhotoSwipe(pswpElement, PhotoSwipeUI_Default, items, {
                    index: parseInt(i)
                });
                gallery.init()
            }
        })
    }
    viewer_init()
</script>




<script src="/js/busuanzi-2.3.pure.min.js"></script>



<script type="text/javascript" src="https://js.users.51.la/20544303.js"></script>

    
  </div>
</body>

</html>